package review;

import java.util.*;

/**
 * 使用递归思想，进行数组中的元素排列组合
 */
public class 排列思想 {

    private static Stack<Integer> stack = new Stack<>();

    private static List<List<Integer>> result = new ArrayList<>();

    private static Integer min = Integer.MAX_VALUE;

    /**
     * 这里i索引可以优化
     *
     *
     * @param array 数组的元素
     * @param target 需要选择的元素个数，就是从数据中需要拿几个元素进行排列组合
     * @param cur 当前已经选择元素的个数
     */
    public static void f(int[] array,int target,int cur) {
        // 需要选择的数据和当前已经选择的数据已经相等了，可以退出
        if(target == cur) {
            // 在这里是一次组合之后的数据，可以写到数组中，或者判断大小
//            List<Integer> list = stack.subList(0,stack.size());
//            List<Integer> aa = new ArrayList<>(list);
//            StringBuilder str = new StringBuilder();
//            for (int i = 0; i < aa.size(); i++) {
//                str.append(aa.get(i));
//            }
//            min = Math.min(min, Integer.parseInt(str.toString()));
//            System.out.println(min);
//            result.add(aa);
            System.out.println(stack);
            return;
        }
        for (int i = 0; i < array.length; i++) {
            if(stack.contains(array[i])) {
                continue;
            }
            stack.add(array[i]);
            f(array,target,cur+1);
            stack.pop();
        }
    }

    public static void main(String[] args) {
        int[] array = new int[]{1,2,3,4};
        f(array,3,0);
        System.out.println(stack.toString());
        System.out.println(stack.size());
    }
}
